Upgrade combine to 4.6.6 This project was upgraded with external_updater. Usage: tools/external_updater/updater.sh update rust/crates/combine For more info, check https://cs.android.com/android/platform/superproject/+/master:tools/external_updater/README.md Test: TreeHugger Change-Id: I37570a8cfa0934a4772aecd0b28596e51d5cbf23 
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json index 458621b..eacdbba 100644 --- a/.cargo_vcs_info.json +++ b/.cargo_vcs_info.json 
@@ -1,6 +1,6 @@  {  "git": { - "sha1": "50a71afa1c88e8564e0220a6e0625dd16a2302a2" + "sha1": "cbc33e72627eac452806240d4bdb948465a4cbe1"  },  "path_in_vcs": ""  } \ No newline at end of file 
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 94b0ed9..807ab87 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml 
@@ -22,7 +22,26 @@    steps:  - uses: actions/checkout@v2 + + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: ${{ matrix.rust }} + override: true +  - name: Build  run: cargo build + + - name: Check 1.40 + if: ${{ matrix.rust == '1.40.0' }} + run: | + cargo "$@" check + cargo "$@" check --no-default-features +  - name: Run tests + if: ${{ matrix.rust != '1.40.0' }}  run: ./ci.sh + + - name: Check docs + if: ${{ matrix.rust == 'stable' }} + run: cargo doc 
diff --git a/Android.bp b/Android.bp index 1f6df66..36a347e 100644 --- a/Android.bp +++ b/Android.bp 
@@ -20,11 +20,10 @@    rust_library {  name: "libcombine", - // has rustc warnings  host_supported: true,  crate_name: "combine",  cargo_env_compat: true, - cargo_pkg_version: "4.6.4", + cargo_pkg_version: "4.6.6",  srcs: ["src/lib.rs"],  edition: "2018",  features: [ 
diff --git a/CHANGELOG.md b/CHANGELOG.md index 2beecf7..a2bf60d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md 
@@ -1,3 +1,10 @@ +<a name="v4.6.5"></a> +### v4.6.5 (2022-08-09) + +* memchr: use non deprecated feature `std` instead of `use_std` + +* refactor: Extract less-generic code from sequence's add_errors (-5%) +  <a name="v4.6.4"></a>  ### v4.6.4 (2022-04-25)   
diff --git a/Cargo.lock b/Cargo.lock.saved similarity index 99% rename from Cargo.lock rename to Cargo.lock.saved index b23775e..1900e9c 100644 --- a/Cargo.lock +++ b/Cargo.lock.saved 
@@ -257,7 +257,7 @@    [[package]]  name = "combine" -version = "4.6.4" +version = "4.6.6"  dependencies = [  "async-std",  "bytes 0.5.6", 
diff --git a/Cargo.toml b/Cargo.toml index cc8ce00..b4e5996 100644 --- a/Cargo.toml +++ b/Cargo.toml 
@@ -12,7 +12,7 @@  [package]  edition = "2018"  name = "combine" -version = "4.6.4" +version = "4.6.6"  authors = ["Markus Westerlind <marwes91@gmail.com>"]  description = "Fast parser combinators on arbitrary streams with zero-copy support."  documentation = "https://docs.rs/combine" @@ -29,6 +29,7 @@  ]  license = "MIT"  repository = "https://github.com/Marwes/combine" +resolver = "1"    [package.metadata.docs.rs]  all-features = true @@ -108,7 +109,7 @@  package = "futures-io"    [dependencies.memchr] -version = "2.2" +version = "2.3"  default-features = false    [dependencies.pin-project-lite] @@ -221,7 +222,7 @@  mp4 = []  pin-project = ["pin-project-lite"]  std = [ - "memchr/use_std", + "memchr/std",  "bytes",  "alloc",  ] 
diff --git a/Cargo.toml.orig b/Cargo.toml.orig index 5d31969..c301500 100644 --- a/Cargo.toml.orig +++ b/Cargo.toml.orig 
@@ -1,6 +1,6 @@  [package]  name = "combine" -version = "4.6.4" +version = "4.6.6"  authors = ["Markus Westerlind <marwes91@gmail.com>"]    description = "Fast parser combinators on arbitrary streams with zero-copy support." @@ -28,7 +28,7 @@    [dependencies]  regex = { version = "1", optional = true } -memchr = { version = "2.2", default-features = false } +memchr = { version = "2.3", default-features = false }  pin-project-lite = { version = "0.2", optional = true }  # Future proofing so that tokio-0.3, tokio-0.1 etc can be supported  tokio-02-dep = { version = "0.2.3", package = "tokio", features = ["io-util"], default-features = false, optional = true } @@ -64,7 +64,7 @@  tokio-03 = ["pin-project", "std", "tokio-03-dep", "futures-core-03", "pin-project-lite"]  tokio = ["tokio-dep", "tokio-util/io", "futures-core-03", "pin-project-lite"]  futures-03 = ["pin-project", "std", "futures-core-03", "futures-io-03", "pin-project-lite"] -std = ["memchr/use_std", "bytes", "alloc"] +std = ["memchr/std", "bytes", "alloc"]  alloc = []    [[test]] 
diff --git a/METADATA b/METADATA index d6be19b..6c436fc 100644 --- a/METADATA +++ b/METADATA 
@@ -1,3 +1,7 @@ +# This project was upgraded with external_updater. +# Usage: tools/external_updater/updater.sh update rust/crates/combine +# For more info, check https://cs.android.com/android/platform/superproject/+/master:tools/external_updater/README.md +  name: "combine"  description: "Fast parser combinators on arbitrary streams with zero-copy support."  third_party { @@ -7,13 +11,13 @@  }  url {  type: ARCHIVE - value: "https://static.crates.io/crates/combine/combine-4.6.4.crate" + value: "https://static.crates.io/crates/combine/combine-4.6.6.crate"  } - version: "4.6.4" + version: "4.6.6"  license_type: NOTICE  last_upgrade_date {  year: 2022 - month: 6 - day: 28 + month: 12 + day: 8  }  } 
diff --git a/README.md b/README.md index fa68ccf..5d67f1c 100644 --- a/README.md +++ b/README.md 
@@ -26,14 +26,20 @@  assert_eq!(result, Ok((Some("word".to_string()), "!")));  ```   -A tutorial as well as explanations on what goes on inside combine can be found in [the wiki](https://github.com/Marwes/combine/wiki). -  Larger examples can be found in the [examples][], [tests][] and [benches][] folders.    [examples]:https://github.com/Marwes/combine/tree/master/examples  [tests]:https://github.com/Marwes/combine/tree/master/tests  [benches]:https://github.com/Marwes/combine/tree/master/benches   +## Tutorial + +A tutorial as well as explanations on what goes on inside combine can be found in [the wiki](https://github.com/Marwes/combine/wiki). + +### Translation + +[Japanese](https://github.com/sadnessOjisan/combine-ja) +  ## Links    [Documentation and examples](https://docs.rs/crate/combine) 
diff --git a/ci.sh b/ci.sh index 6397319..c850263 100755 --- a/ci.sh +++ b/ci.sh 
@@ -1,27 +1,18 @@  #!/bin/bash -x  set -ex   -if [[ "$TRAVIS_RUST_VERSION" == "1.40.0" ]]; then - cargo "$@" check - cargo "$@" check --no-default-features -else - cargo "$@" build - cargo "$@" test --all-features - cargo "$@" test --all-features --examples +cargo "$@" build +cargo "$@" test --all-features +cargo "$@" test --all-features --examples   - cargo "$@" test --bench json --bench http -- --test - cargo "$@" check --bench mp4 --features mp4 -  - cargo "$@" build --no-default-features --features alloc - cargo "$@" test --no-default-features --features alloc --examples +cargo "$@" test --bench json --bench http -- --test +cargo "$@" check --bench mp4 --features mp4   - cargo "$@" build --no-default-features - cargo "$@" test --no-default-features --examples +cargo "$@" build --no-default-features --features alloc +cargo "$@" test --no-default-features --features alloc --examples   - cargo "$@" check --no-default-features --features tokio-02 - cargo "$@" check --no-default-features --features tokio-03 -fi +cargo "$@" build --no-default-features +cargo "$@" test --no-default-features --examples   -if [[ "$TRAVIS_RUST_VERSION" == "stable" ]]; then - cargo doc -fi +cargo "$@" check --no-default-features --features tokio-02 +cargo "$@" check --no-default-features --features tokio-03 
diff --git a/src/parser/range.rs b/src/parser/range.rs index 7b53fe6..46353eb 100644 --- a/src/parser/range.rs +++ b/src/parser/range.rs 
@@ -85,7 +85,6 @@  /// assert!(parser.parse("!").is_err());  /// # }  /// ``` - #[inline]  pub fn recognize[Input, P](parser: P)(Input) -> <Input as StreamOnce>::Range  where [  P: Parser<Input>, 
diff --git a/src/parser/sequence.rs b/src/parser/sequence.rs index 1c8bdcb..166b89d 100644 --- a/src/parser/sequence.rs +++ b/src/parser/sequence.rs 
@@ -14,17 +14,6 @@  ErrorOffset, Parser, Stream, StreamOnce,  };   -macro_rules! dispatch_on { - ($i: expr, $f: expr;) => { - }; - ($i: expr, $f: expr; $first: ident $(, $id: ident)*) => { { - let b = $f($i, $first); - if b { - dispatch_on!($i + 1, $f; $($id),*); - } - } } -} -  macro_rules! count {  () => { 0 };  ($f: ident) => { 1 }; @@ -63,6 +52,37 @@  ($id: ident, $($rest: ident),+) => { last_ident!($($rest),+) };  }   +fn add_sequence_error<Input>( + i: &mut usize, + first_empty_parser: usize, + inner_offset: ErrorOffset, + err: &mut Tracked<Input::Error>, + parser: &mut impl Parser<Input>, +) -> bool +where + Input: Stream, +{ + if *i + 1 == first_empty_parser { + Parser::add_committed_expected_error(parser, err); + } + if *i >= first_empty_parser { + if err.offset <= ErrorOffset(1) { + // We reached the last parser we need to add errors to (and the + // parser that actually returned the error), use the returned + // offset for that parser. + err.offset = inner_offset; + } + Parser::add_error(parser, err); + if err.offset <= ErrorOffset(1) { + return false; + } + } + err.offset = ErrorOffset(err.offset.0.saturating_sub(Parser::parser_count(parser).0)); + + *i += 1; + true +} +  macro_rules! tuple_parser {  ($partial_state: ident; $h: ident $(, $id: ident)*) => {  #[allow(non_snake_case)] @@ -99,27 +119,20 @@  if let Ok(t) = input.uncons() {  err.error.add(StreamError::unexpected_token(t));  } - dispatch_on!(0, |i, mut p| { - if i + 1 == first_empty_parser { - Parser::add_committed_expected_error(&mut p, &mut err); + + #[allow(unused_assignments)] + let mut i = 0; + loop { + if !add_sequence_error(&mut i, first_empty_parser, inner_offset, &mut err, $h) { + break;  } - if i >= first_empty_parser { - if err.offset <= ErrorOffset(1) { - // We reached the last parser we need to add errors to (and the - // parser that actually returned the error), use the returned - // offset for that parser. - err.offset = inner_offset; - } - Parser::add_error(&mut p, &mut err); - if err.offset <= ErrorOffset(1) { - return false; - } + $( + if !add_sequence_error(&mut i, first_empty_parser, inner_offset, &mut err, $id) { + break;  } - err.offset = ErrorOffset( - err.offset.0.saturating_sub(Parser::parser_count(&p).0) - ); - true - }; $h $(, $id)*); + )* + break; + }  CommitErr(err.error)  } else {  PeekErr(err) 
diff --git a/src/stream/mod.rs b/src/stream/mod.rs index ff9780e..b1f3d07 100644 --- a/src/stream/mod.rs +++ b/src/stream/mod.rs 
@@ -1401,7 +1401,7 @@  /// },  /// |input, _position| combine::easy::Stream::from(input),  /// ).map_err(combine::easy::Errors::<u8, &[u8], _>::from), -/// Ok(819), +/// Ok(824),  /// );  /// ```  #[cfg(feature = "std")] @@ -1497,7 +1497,7 @@  /// },  /// |input, _position| combine::easy::Stream::from(input),  /// ).map_err(combine::easy::Errors::<u8, &[u8], _>::from), -/// Ok(819), +/// Ok(824),  /// );  /// }  /// ``` @@ -1591,7 +1591,7 @@  /// },  /// |input, _position| combine::easy::Stream::from(input),  /// ).map_err(combine::easy::Errors::<u8, &[u8], _>::from), -/// Ok(819), +/// Ok(824),  /// );  /// }  /// ``` @@ -1687,7 +1687,7 @@  /// },  /// |input, _position| combine::easy::Stream::from(input),  /// ).map_err(combine::easy::Errors::<u8, &[u8], _>::from), -/// Ok(819), +/// Ok(824),  /// );  /// }  /// ``` @@ -1783,7 +1783,7 @@  /// },  /// |input, _position| combine::easy::Stream::from(input),  /// ).map_err(combine::easy::Errors::<u8, &[u8], _>::from), -/// Ok(819), +/// Ok(824),  /// );  /// }  /// ``` 
diff --git a/tests/async.rs b/tests/async.rs index f5fb063..bedaa72 100644 --- a/tests/async.rs +++ b/tests/async.rs 
@@ -634,7 +634,7 @@  assert_eq!(result.unwrap(), [""]);  }   -const WORDS_IN_README: usize = 819; +const WORDS_IN_README: usize = 824;    #[test]  fn decode_std() { @@ -850,5 +850,5 @@  }  }  } - assert_eq!(819, count); + assert_eq!(824, count);  }